package org.zwy.gradetrack.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.zwy.gradetrack.entity.GraduateSelfEvaluation;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 毕业生自评服务接口
 */
public interface GraduateSelfEvaluationService extends IService<GraduateSelfEvaluation> {

    /**
     * 分页查询毕业生自评列表
     *
     * @param current 当前页
     * @param size 每页大小
     * @param graduateId 毕业生ID（可选）
     * @param indicatorId 指标点ID（可选）
     * @return 分页结果
     */
    Page<GraduateSelfEvaluation> pageEvaluations(Integer current, Integer size, Long graduateId, Long indicatorId);

    /**
     * 创建毕业生自评
     *
     * @param evaluation 自评数据
     * @return 创建的自评数据
     */
    GraduateSelfEvaluation createEvaluation(GraduateSelfEvaluation evaluation);

    /**
     * 更新毕业生自评
     *
     * @param id 自评ID
     * @param evaluation 自评数据
     * @return 更新后的自评数据
     */
    GraduateSelfEvaluation updateEvaluation(Long id, GraduateSelfEvaluation evaluation);

    /**
     * 获取自评统计信息
     *
     * @param graduateId 毕业生ID（可选）
     * @param indicatorId 指标点ID（可选）
     * @return 统计信息
     */
    Map<String, Object> getStatistics(Long graduateId, Long indicatorId);

    /**
     * 批量导入自评数据
     *
     * @param evaluations 自评数据列表
     */
    void batchImport(List<GraduateSelfEvaluation> evaluations);

    /**
     * 检查自评是否存在
     *
     * @param graduateId 毕业生ID
     * @param indicatorId 指标点ID
     * @return 是否存在
     */
    boolean existsEvaluation(Long graduateId, Long indicatorId);

    /**
     * 获取毕业生对指标点的所有自评
     *
     * @param graduateId 毕业生ID
     * @param indicatorId 指标点ID
     * @return 自评列表
     */
    List<GraduateSelfEvaluation> getGraduateIndicatorEvaluations(Long graduateId, Long indicatorId);

    /**
     * 获取指定指标点和评价年份的最新评价分数
     * @param indicatorId 指标点ID
     * @param evaluationYear 评价年份
     * @return 评价分数
     */
    BigDecimal getLatestEvaluationScore(Long indicatorId, Integer evaluationYear);
} 